﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace CRC
{
    public partial class UsrDocumentos : UserControl
    {
        MySql.Data.MySqlClient.MySqlDataAdapter ad;
        DataAccess bd = new DataAccess();
        DataSet ds = new DataSet();
        private string strId = "";
        private int cTb=-1;
        //private UsrThumbnail[] tB;
        PictureBox tmpPic;

        public UsrDocumentos()
        {
            InitializeComponent();

            if (strId != string.Empty)
            {
                Cargar_Carpetas(); // Cargo las carpetas contenedoras de imagenes.  
            }
        }

        private void Cargar_Carpetas()
        {

            //Limpio la tabla FotoFiles, del Dataset ( try para el caso de q no se haya creado.)
            try { ds.Tables["fCat"].Clear(); }
            catch { }       
           
            bd.Init();
            listView1.Clear();

            string strSQL = "SELECT * FROM cat_archivos WHERE Visible = 1 AND GRUPO = '0002000' ORDER BY Categoria";

            ad = bd.LoadData(strSQL);
            ad.Fill(ds, "fCat");

            for (int i = 0; i <= ds.Tables["fCat"].Rows.Count - 1; i++)
            {
                 listView1.Items.Add(ds.Tables["fCat"].Rows[i]["Categoria"].ToString(), ds.Tables["fCat"].Rows[i]["Nombre"].ToString(),0);
            }

        }

        public void Cargar_Imagenes(string strCategoria)
        {
             //Limpio el Dataset
            try { ds.Tables["Files"].Clear(); }
            catch { }

            //string strSQL = "SELECT * FROM salones_fotos WHERE ID_SALON = '1' ORDER BY CATEGORIA;";
            string strSQL = "SELECT id, file_name, file_size, categoria, id_salon, thumbnail, grupo, info FROM salones_fotos WHERE ID_SALON = '" + strId + "' AND GRUPO = '0002000' AND CATEGORIA = '" + strCategoria + "' ORDER BY CATEGORIA;";
                        
            bd.Init();
            ad = bd.LoadData(strSQL);
            ad.Fill(ds, "Files");

           // Image image1;
           // byte[] buffer;
           // System.IO.MemoryStream stream1;

             for (int i = 0; i <= ds.Tables["Files"].Rows.Count - 1; i++)
            {
                lstFiles.Items.Add(ds.Tables["Files"].Rows[i]["id"].ToString(), ds.Tables["Files"].Rows[i]["file_name"].ToString(), 1);
            }            
        }


        private void btnAddFolder_Click(object sender, EventArgs e)
        {

            bd.Init();

            string strSQL = "SELECT Categoria FROM cat_archivos WHERE GRUPO = '0002000' ORDER BY Categoria";

            ad = bd.LoadData(strSQL);
            ad.Fill(ds, "cCat");
            
            string vAc = ""; // Valor Actual
            int vAn = 2000;  // Valor Anterior

            // Recorro Bucles en busca de huecos o categorias borradas que pueda aprovechar
            for (int i=0; i < ds.Tables["cCat"].Rows.Count; i++)
            {
                //MessageBox.Show(ds.Tables["cCat"].Rows[i][0].ToString());
                if (vAn + 1 < Convert.ToInt32(ds.Tables["cCat"].Rows[i][0]))
                {
                    vAc = (vAn + 1).ToString().PadLeft(7,'0');                
                }
                vAn = Convert.ToInt32(ds.Tables["cCat"].Rows[i][0]);

                if (vAc != String.Empty)
                {
                    // Salimos del bucle (ya tenemos nuestra categoría);
                    i = ds.Tables["cCat"].Rows.Count;
                }
            }

            if (vAc == String.Empty)
            {
                vAc = (vAn+1).ToString().PadLeft(7, '0');
            }
         
            bd.Init();
            bd.Execute("INSERT INTO cat_archivos (CATEGORIA, NOMBRE,VISIBLE, GRUPO) VALUES ('" + vAc + "', 'Carpeta " + vAc + "',1,'0002000');");

            //Limpio el dataset para la proxima busqueda
            ds.Tables["cCat"].Clear();
            
            //ad.Dispose();

            // Recargo el listview
            Cargar_Carpetas();
        }

        private void btnDelFolder_Click(object sender, EventArgs e)
        {
            bd.Init();

            if (listView1.SelectedItems.Count != 0)
            {
                if (MessageBox.Show("¿Esta seguro de querer eliminar el registro?", "Eliminar registro", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    bd.Execute("DELETE FROM cat_archivos WHERE CATEGORIA = '" + listView1.SelectedItems[0].Name.ToString() + "' AND GRUPO = '0002000';");

                    // Recargo el listview
                    Cargar_Carpetas();
                }
            }
            else
            { 
                MessageBox.Show("Seleccione primero una carpeta", "Eliminar carpeta", MessageBoxButtons.YesNo, MessageBoxIcon.Information); 
            }

        }

        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Limpio la tabla FotoFiles, del Dataset ( try para el caso de q no se haya creado.)
            try { ds.Tables["Files"].Clear(); }
            catch { }

            // Cantidad de Controles en flPanel1 -- Las destruyo

            Application.DoEvents();

            if (listView1.SelectedItems.Count != 0)
            {
                Cargar_Imagenes(listView1.SelectedItems[0].Name.ToString());                
            }
        }
        private void listView1_AfterLabelEdit(object sender, System.Windows.Forms.LabelEditEventArgs e)
        {
           // Evento canviar nombre carpeta--- canvia la tabla.           
           bd.Init();
           if (String.IsNullOrEmpty(e.Label) == false)
           {               
               bd.Execute("UPDATE cat_archivos SET NOMBRE = '" + e.Label + "' WHERE CATEGORIA = '" + listView1.SelectedItems[0].Name.ToString() + "';");
           }
        }
        
        private void btnSubirFoto_Click(object sender, EventArgs e)
        {                       

            if (listView1.SelectedItems.Count != 0)
            {

                // Captuar imagen y la sube a la bbdd            
                OpenFileDialog oFileDialog = new OpenFileDialog();

                oFileDialog.Filter = "jpg files (*.jpg)|*.jpg|png files (*.png)|*.png";
                oFileDialog.FilterIndex = 1;
                oFileDialog.RestoreDirectory = true;

                if (oFileDialog.ShowDialog() == DialogResult.OK)
                {
                    if (oFileDialog.FileName != null)
                    {
                        bd.Init();
                        int b = bd.addFile(oFileDialog.FileName, "salones_fotos", "file_data",listView1.SelectedItems[0].Name.ToString(), "0002000", strId);

                    }
                }                
            }
            else
            {
                MessageBox.Show("Seleccionar Primero una carpeta", "Falta Carpeta", MessageBoxButtons.OK);
            }                        
        }

        public string Id
        {
            get
            {
                return strId;
            }
            set
            {
                strId = value;
                if (strId != string.Empty)
                {
                    //Activamos.
                    //flPanel1.Enabled = true;
                    tabControl1.Enabled = true;
                    Cargar_Carpetas();
                }
            }
        }

        
        private void btnGuardar_Click(object sender, EventArgs e)
        {

                SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
                SaveFileDialog1.Filter = "Archivos *.*|*.*";
                SaveFileDialog1.Title = "Guardar archivo";
                SaveFileDialog1.FileName = lstFiles.SelectedItems[0].Text.ToString();
                SaveFileDialog1.ShowDialog();

                if (SaveFileDialog1.FileName != "")
                {
                    //Creamos un FileStream, para crear el archivo
                    System.IO.FileStream fs;
                    byte[] buffer;

                    fs = new System.IO.FileStream(SaveFileDialog1.FileName, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite);
                    
                    // Recuperamos el archivo
                    bd.Init();
                    buffer = bd.getImage(Convert.ToInt32(lstFiles.SelectedItems[0].Name.ToString()), "salones_fotos");
                    // Grabamos el archivo.
                    fs.Write(buffer, 0, buffer.Length); //graba fichero en la variable rawData.
                    
                    fs.Close();                  
                }            
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            // Destruimos tmpPic // La imagen maximizada, al destruirse desaparece...
            tmpPic.Dispose();
            btnCerrar.Visible = false;
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {                
            printDialog1.Document = printDocument1;

            if ((printDialog1.ShowDialog() == DialogResult.OK))
            {
                //printDocument1.PrintPage += new PrintPageEventHandler(this.OnPrintPage);
                printDocument1.Print();
            }
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
           Point mp = new Point(25,20);
           e.Graphics.DrawImage(tmpPic.Image, mp);
        }

        private void btnCerrarP_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }


        private void lstFiles_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                bd.Init();
                string strFilename = bd.getFile(Convert.ToInt32(lstFiles.SelectedItems[0].Name.ToString()), "salones_fotos");
                System.Diagnostics.Process.Start(strFilename);
            }
            catch { }
        }


    }
}
